[アップデート] Amazon API Gateway で TLS 1.3 をサポートする API タイプ、エンドポイントタイプが増えました
いわさです。
今朝、Amazon API Gateway で TLS 1.3 をサポートしたというアップデートアナウンスがありました。
API Gateway のエンドポイントは TLS が必須となっていますが、これまで多くのエンドポイントタイプや API タイプでは最大が TLS 1.2 まではサポートされていたのですが、TLS 1.3 がまだサポートされていない状態でした。
前提として API Gateway には次のように複数の API タイプが存在しています。
さらに、REST API にはエッジ、リージョナル、プライベートと 3 種類のエンドポイントタイプが存在します。
API タイプやエンドポイントタイプによって TLS のサポートバージョンが異なる状態でした。
具体的には、今回のアップデート前までの最大TLSバージョンは次のようになっていました。
タイプ | 最大サポートバージョン |
---|---|
HTTP | TLS 1.2 |
REST - エッジ | TLS 1.3 |
REST - リージョナル | TLS1.2 |
REST - プライベート | TLS1.2 |
WebSocket | TLS1.2 |
従来は REST API のエッジエンドポイントでのみ TLS 1.3 がサポートされていました。
これが、今回のアップデートでこれが次のように変わりました。
タイプ | 最大サポートバージョン |
---|---|
HTTP | TLS 1.3 |
REST - エッジ | TLS 1.3 |
REST - リージョナル | TLS1.3 |
REST - プライベート | TLS1.2 |
WebSocket | TLS1.3 |
REST API のプライベートエンドポイント以外は TLS 1.3 がサポートされました。
公式ドキュメントでは次のページにて、REST API および、WebSocket API と HTTP API も TLS1.3 がサポートされていることが確認出来ます。
- Choosing a security policy for your custom domain in API Gateway - Amazon API Gateway
- Security policy for WebSocket APIs - Amazon API Gateway
- Security policy for HTTP APIs - Amazon API Gateway
注意点として、本日時点で次の公式ドキュメントではまだ WebSocket と HTTP については TLS1.2 のみをサポートしているという表記が残っていました、が実際に動作確認したところ TLS 1.3 が使えていました。
WebSocket APIs and HTTP APIs support only TLS 1.2.
確認してみた
今回は次のように 5 つのタイプの API を作成し、cURL 経由で TLS バージョンを確認しました。
なお、TLS バージョン確認方法について次の記事も参考にさせて頂きました。
REST API - エッジエンドポイント
まずはエッジエンドポイントです。
こちらはアップデート前から TLSv1.3 がサポートされていました。
[ec2-user@ip-10-0-13-246 ~]$ curl -s -v https://psx4nto29k.execute-api.ap-northeast-1.amazonaws.com/hoge021 6restedge/ * Host psx4nto29k.execute-api.ap-northeast-1.amazonaws.com:443 was resolved. * IPv6: (none) * IPv4: 13.249.160.86, 13.249.160.106, 13.249.160.5, 13.249.160.83 * Trying 13.249.160.86:443... * Connected to psx4nto29k.execute-api.ap-northeast-1.amazonaws.com (13.249.160.86) port 443 * ALPN: curl offers h2,http/1.1 * TLSv1.3 (OUT), TLS handshake, Client hello (1): * CAfile: /etc/pki/tls/certs/ca-bundle.crt * CApath: none * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.3 (IN), TLS handshake, CERT verify (15): * TLSv1.3 (IN), TLS handshake, Finished (20): * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.3 (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519 / RSASSA-PSS :
期待どおり、TLSv1.3 が使われていますね。
REST API - リージョナルエンドポイント
こちらはリージョナルエンドポイントです。
アップデート前は TLSv1.2 までのサポートでした。
[ec2-user@ip-10-0-13-246 ~]$ curl -s -v https://0vwh02fk8h.execute-api.ap-northeast-1.amazonaws.com/hoge021 6restregional/ * Host 0vwh02fk8h.execute-api.ap-northeast-1.amazonaws.com:443 was resolved. * IPv6: (none) * IPv4: 54.249.225.26, 18.177.112.84, 18.180.236.113 * Trying 54.249.225.26:443... * Connected to 0vwh02fk8h.execute-api.ap-northeast-1.amazonaws.com (54.249.225.26) port 443 * ALPN: curl offers h2,http/1.1 * TLSv1.3 (OUT), TLS handshake, Client hello (1): * CAfile: /etc/pki/tls/certs/ca-bundle.crt * CApath: none * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.3 (IN), TLS handshake, CERT verify (15): * TLSv1.3 (IN), TLS handshake, Finished (20): * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.3 (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519 / RSASSA-PSS :
おお、TLSv1.3 が使われていますね。
REST API - プライベートエンドポイント
こちらはプライベートエンドポイントです。
今回のアップデートで唯一 TLSv1.3 が使えないエンドポイントタイプとなりました。
試してみましょう。
[ec2-user@ip-172-31-4-123 ~]$ curl -s -v https://w6z07n1lnh.execute-api.ap-northeast-1.amazonaws.com/hoge0216 restprivate/ * Host w6z07n1lnh.execute-api.ap-northeast-1.amazonaws.com:443 was resolved. * IPv6: (none) * IPv4: 172.31.34.207 * Trying 172.31.34.207:443... * Connected to w6z07n1lnh.execute-api.ap-northeast-1.amazonaws.com (172.31.34.207) port 443 * ALPN: curl offers h2,http/1.1 * TLSv1.3 (OUT), TLS handshake, Client hello (1): * CAfile: /etc/pki/tls/certs/ca-bundle.crt * CApath: none * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12): * TLSv1.2 (IN), TLS handshake, Server finished (14): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.2 (OUT), TLS handshake, Finished (20): * TLSv1.2 (IN), TLS handshake, Finished (20): * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 / prime256v1 / rsaEncryption
こちらについては TLSv1.2 が使われていることが確認出来ます。やはり、TLSv1.3 はサポートされていないままですね。
HTTP API
こちらは REST ではなく HTTP API です。
こちらはドキュメントの構造がアップデート前後で異なっていて確証がなかったのですが、データ保護のドキュメントを確認する限りではアップデート前は TLSv1.3 はサポートされていなかったようです。
[ec2-user@ip-10-0-13-246 ~]$ curl -s -v https://8eyyvhe3gf.execute-api.ap-northeast-1.amazonaws.com/hoge0216stage/ > /dev/null * Host 8eyyvhe3gf.execute-api.ap-northeast-1.amazonaws.com:443 was resolved. * IPv6: (none) * IPv4: 54.199.51.116, 52.69.232.11 * Trying 54.199.51.116:443... * Connected to 8eyyvhe3gf.execute-api.ap-northeast-1.amazonaws.com (54.199.51.116) port 443 * ALPN: curl offers h2,http/1.1 } [5 bytes data] * TLSv1.3 (OUT), TLS handshake, Client hello (1): } [512 bytes data] * CAfile: /etc/pki/tls/certs/ca-bundle.crt * CApath: none { [5 bytes data] * TLSv1.3 (IN), TLS handshake, Server hello (2): { [122 bytes data] * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): { [19 bytes data] * TLSv1.3 (IN), TLS handshake, Certificate (11): { [5008 bytes data] * TLSv1.3 (IN), TLS handshake, CERT verify (15): { [264 bytes data] * TLSv1.3 (IN), TLS handshake, Finished (20): { [36 bytes data] * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): } [1 bytes data] * TLSv1.3 (OUT), TLS handshake, Finished (20): } [36 bytes data] * SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519 / RSASSA-PSS :
TLSv1.3 が使われていますね。
データ保護のドキュメントでは TLSv1.2 までしかサポートされていないと記述されていましたが、更新がまだ反映されていないようですね。
WebSocket API
こちらは WebSocket API です。
コネクションエンドポイントで確認を行いました。HTTP API と同様にアップデート前は TLSv1.2 までしかサポートされていませんでした。
[ec2-user@ip-10-0-13-246 ~]$ curl -s -v https://zjiqwe48d9.execute-api.ap-northeast-1.amazonaws.com/production/@connections * Host zjiqwe48d9.execute-api.ap-northeast-1.amazonaws.com:443 was resolved. * IPv6: (none) * IPv4: 13.113.60.89, 18.178.255.60, 52.69.196.27 * Trying 13.113.60.89:443... * Connected to zjiqwe48d9.execute-api.ap-northeast-1.amazonaws.com (13.113.60.89) port 443 * ALPN: curl offers h2,http/1.1 * TLSv1.3 (OUT), TLS handshake, Client hello (1): * CAfile: /etc/pki/tls/certs/ca-bundle.crt * CApath: none * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.3 (IN), TLS handshake, CERT verify (15): * TLSv1.3 (IN), TLS handshake, Finished (20): * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.3 (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519 / RSASSA-PSS :
TLSv1.3 が使われていますね。
さいごに
本日は Amazon API Gateway で TLS 1.3 をサポートするタイプが増えたのでサポート状況を整理し、実際に全てのタイプでバージョンの確認を行ってみました。
プライベート API 以外は全て TLSv1.3 がサポートされましたね。
TLSv1.3 がサポートされておらず API Gateway の採用を見送るケースを見たことがあったのですが、これで採用しやすくなったのではないでしょうか。